// utils/constants.js
// 任务数据结构和常量定义

/**
 * 存储键名
 */
export const STORAGE_KEYS = {
  TASKS: 'todolist_tasks',           // 任务列表
  SETTINGS: 'todolist_settings',     // 应用设置
  STATS: 'todolist_stats'            // 统计信息
}

/**
 * 任务优先级
 */
export const PRIORITY = {
  HIGH: 1,    // 高优先级
  MEDIUM: 2,  // 中优先级
  LOW: 3      // 低优先级
}

/**
 * 任务状态
 */
export const TASK_STATUS = {
  PENDING: 0,     // 待完成
  COMPLETED: 1,   // 已完成
  DELETED: 2      // 已删除
}

/**
 * 优先级映射
 */
export const PRIORITY_MAP = {
  [PRIORITY.HIGH]: {
    text: '高',
    color: '#ff4757',
    value: 'high'
  },
  [PRIORITY.MEDIUM]: {
    text: '中',
    color: '#ffa502',
    value: 'medium'
  },
  [PRIORITY.LOW]: {
    text: '低',
    color: '#2ed573',
    value: 'low'
  }
}

/**
 * 筛选选项
 */
export const FILTER_OPTIONS = [
  { value: 'all', label: '全部' },
  { value: 'high', label: '高优先级' },
  { value: 'medium', label: '中优先级' },
  { value: 'low', label: '低优先级' }
]

/**
 * 任务数据结构接口
 * @typedef {Object} Task
 * @property {string} id - 任务唯一标识符
 * @property {string} title - 任务标题
 * @property {string} note - 任务备注
 * @property {number} priority - 优先级 (1-高，2-中，3-低)
 * @property {number} status - 任务状态 (0-待完成，1-已完成，2-已删除)
 * @property {number} createTime - 创建时间戳
 * @property {number} updateTime - 更新时间戳
 * @property {number} completeTime - 完成时间戳
 * @property {boolean} isDeleted - 是否已删除
 */

/**
 * 创建新任务的默认数据
 * @param {string} title - 任务标题
 * @param {string} note - 任务备注
 * @param {number} priority - 优先级
 * @returns {Task} 新任务对象
 */
export const createTaskTemplate = (title, note = '', priority = PRIORITY.MEDIUM) => {
  const now = Date.now()
  
  // 确保title和note是字符串类型
  const titleStr = (title || '').toString()
  const noteStr = (note || '').toString()
  
  return {
    id: generateTaskId(),
    title: titleStr.trim(),
    note: noteStr.trim(),
    priority: priority,
    status: TASK_STATUS.PENDING,
    createTime: now,
    updateTime: now,
    completeTime: 0,
    isDeleted: false
  }
}

/**
 * 生成任务ID
 * @returns {string} 任务ID
 */
export const generateTaskId = () => {
  return 'task_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9)
}

/**
 * 验证任务数据
 * @param {Task} task - 任务对象
 * @returns {Object} 验证结果
 */
export const validateTask = (task) => {
  const errors = []
  
  if (!task.title || task.title.trim().length === 0) {
    errors.push('任务标题不能为空')
  }
  
  if (task.title && task.title.trim().length > 100) {
    errors.push('任务标题不能超过100个字符')
  }
  
  if (task.note && task.note.trim().length > 500) {
    errors.push('任务备注不能超过500个字符')
  }
  
  if (![PRIORITY.HIGH, PRIORITY.MEDIUM, PRIORITY.LOW].includes(task.priority)) {
    errors.push('优先级设置无效')
  }
  
  return {
    isValid: errors.length === 0,
    errors: errors
  }
}

/**
 * 格式化时间显示
 * @param {number} timestamp - 时间戳
 * @returns {string} 格式化后的时间字符串
 */
export const formatTime = (timestamp) => {
  if (!timestamp) return ''
  
  const date = new Date(timestamp)
  const now = new Date()
  const diff = now - date
  
  // 一分钟内
  if (diff < 60 * 1000) {
    return '刚刚'
  }
  
  // 一小时内
  if (diff < 60 * 60 * 1000) {
    return Math.floor(diff / (60 * 1000)) + '分钟前'
  }
  
  // 一天内
  if (diff < 24 * 60 * 60 * 1000) {
    return Math.floor(diff / (60 * 60 * 1000)) + '小时前'
  }
  
  // 一周内
  if (diff < 7 * 24 * 60 * 60 * 1000) {
    return Math.floor(diff / (24 * 60 * 60 * 1000)) + '天前'
  }
  
  // 超过一周，显示具体日期
  const month = date.getMonth() + 1
  const day = date.getDate()
  return `${month}月${day}日`
} 